﻿using SupportLayer.Constantes.OUTROS;
using SupportLayer.Constantes.PRODUTO;
using SupportLayer.Objetos.Produto;
using Util.ExtensionMethods;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using PersistenceLayer.DAL;
using PersistenceLayer.Model;
using SupportLayer.Constantes;

namespace ByBikeShop.Site.Pages
{
	public partial class VerProduto : BasePage
	{
		public Int64 ProdutoID
		{
			get
			{
				try
				{
					return Convert.ToInt64(Util.Criptografia.Decriptar(SupportLayer.Constantes.CRIPTO.CHAVE, SupportLayer.Constantes.CRIPTO.VETOR, Request.QueryString[OUTROS.PRODUTO_ID].ToString()));
				}
				catch
				{
					return 0;
				}
			}
		}
		PersistenceLayer.Model.Produto p = new PersistenceLayer.Model.Produto();
		ProdutoDAL pd = new ProdutoDAL();
		protected void Page_Load(object sender, EventArgs e)
		{
			if (ProdutoID <= 0)
				throw new ApplicationException("Produto não encontrado!");

			base.PageLoad();
		}
		public override void CarregaDados()
		{
			p = pd.Obter(ProdutoID);

			this.Page.Title = p.Produto_Marca.Descricao + " " + p.Modelo;
			lblNomeProduto.Text = p.Produto_Categoria.Descricao + " " + p.Produto_Marca.Descricao + " " + p.Modelo;
			imgProduto.ImageUrl = ResolveUrl("/Imagens" + p.Foto_Principal);
			imgProduto.AlternateText = p.Modelo;
			lblInfoProduto.Text = p.Descricao;

			imgRating1.ImageUrl = ResolveUrl("/Imagens/Icones/star3.svg");
			imgRating2.ImageUrl = ResolveUrl("/Imagens/Icones/star3.svg");
			imgRating3.ImageUrl = ResolveUrl("/Imagens/Icones/star3.svg");
			imgRating4.ImageUrl = ResolveUrl("/Imagens/Icones/star2.svg");
			imgRating5.ImageUrl = ResolveUrl("/Imagens/Icones/star.svg");

			CarregaFotos();
			CarregaPrecos();
			CarregaEspecificacoes();
			SalvaView(p);
		}
		private void SalvaView(PersistenceLayer.Model.Produto Produto)
		{
			try
			{
				Produto_Views pv = new Produto_Views();
				pv.Data = DateTime.Now;
				pv.Produto_ID = ProdutoID;

				new Produto_ViewDAL().Adicionar(pv);
			}
			catch
			{
			}
		}
		private void CarregaFotos()
		{
			var lf = new Produto_FotosDAL().ListarPorProdutoID(ProdutoID);
			for (int iFoto = 0; iFoto < lf.Count; iFoto++)
			{
				switch (iFoto)
				{
					case 0:
						imgFoto1.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto1.AlternateText = p.Modelo;
						imgFoto1.Visible = true;
						break;
					case 1:
						imgFoto2.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto2.AlternateText = p.Modelo;
						imgFoto2.Visible = true;
						break;
					case 2:
						imgFoto3.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto3.AlternateText = p.Modelo;
						imgFoto3.Visible = true;
						break;
					case 3:
						imgFoto4.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto4.AlternateText = p.Modelo;
						imgFoto4.Visible = true;
						break;
					case 4:
						imgFoto5.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto5.AlternateText = p.Modelo;
						imgFoto5.Visible = true;
						break;
					case 5:
						imgFoto6.ImageUrl = ResolveUrl("/Imagens" + lf[iFoto].Caminho);
						imgFoto6.AlternateText = p.Modelo;
						imgFoto6.Visible = true;
						break;
					default:
						break;
				}
			}
		}
		private void CarregaPrecos()
		{
			bool indisponivel = true;

			if ((p.Produto_Promocao != null) && (p.Produto_Promocao.Count > 0))
			{
				lblPrecoAntigo.Text = "R$ " + p.Preco;
				lblDesconto.Text = "-" + p.Produto_Promocao.ToList()[0].Porcentagem;

				if (p.Produto_Especificacao.isNull())
					indisponivel = true;

				foreach (var item in p.Produto_Especificacao)
				{
					if (item.Quantidade > 0)
						indisponivel = false;
				}

				if (indisponivel)
				{
					lblPreco.Text = "INDISPONÍVEL";
				}
				else
				{
					lblPreco.Text = "R$ " + CalcularDesconto(p.Preco, p.Produto_Promocao.ToList()[0].Porcentagem).toMoneyString();
				}
			}
			else
			{
				if (p.Produto_Especificacao.isNull())
					indisponivel = true;
				else
					foreach (var item in p.Produto_Especificacao)
					{
						if (item.Quantidade > 0)
							indisponivel = false;
					}

				if (indisponivel)
				{
					lblPreco.Text = "INDISPONÍVEL";
					Page.Controls.Remove(btnAdicionarCarrinho);
				}
				else
					lblPreco.Text = "R$ " + p.Preco.toMoneyString();
			}
		}
		private void CarregaEspecificacoes()
		{
			if (p.Produto_Especificacao == null)
				return;
			else
			{
				DataTable dt = new DataTable();
				dt.Columns.Add("Tamanho");

				string ultimo = "";

				foreach (var e in p.Produto_Especificacao.OrderBy(a => a.Tamanho).ToList())
				{
					if (e.Quantidade > 0)
					{
						if (e.Tamanho != ultimo)
							dt.Rows.Add(e.Tamanho);
						ultimo = e.Tamanho;
					}
				}

				rptTamanhos.DataSource = dt;
				rptTamanhos.DataBind();
			}
		}
		protected void Fotos_Click(object sender, ImageClickEventArgs e)
		{
			imgProduto.ImageUrl = ((ImageButton)sender).ImageUrl;
		}
		protected void btnFacebook_Click(object sender, ImageClickEventArgs e)
		{
			try
			{
			}
			catch (Exception)
			{

				throw;
			}
		}
		protected void btnTamanho_Click(object sender, EventArgs e)
		{
			Button btnSender = (Button)sender;

			rptCores.DataSource = null;
			rptCores.DataBind();

			rptCores.DataSource = new Produto_EspecificacaoDAL().ListarPorTamanho(ProdutoID, btnSender.Text);
			rptCores.DataBind();

			hdfTamanho.Value = btnSender.Text;
			lblTamanho.Text = btnSender.Text;
			lblNextI.Text = " -> ";
			lblNextII.Text = "";
			lblCor.Text = "";
			lblQuantidade.Text = "";

			divCor.Style.Add("display", "block");
		}
		protected void btnCor_Click(object sender, EventArgs e)
		{
			Button btnCor = (Button)sender;

			var esp = new Produto_EspecificacaoDAL().ObterPorTamanhoCor(ProdutoID, hdfTamanho.Value, btnCor.Text);

			if (esp == null)
				return;

			DataTable dt = new DataTable();
			dt.Columns.Add("quantidade");

			for (int i = 1; i <= esp.Quantidade; i++)
			{
				dt.Rows.Add(i);
			}

			rptQuantidade.DataSource = dt;
			rptQuantidade.DataBind();

			lblCor.Text = btnCor.Text;
			lblNextII.Text = " -> ";
			lblQuantidade.Text = "";

			divQuantidade.Style.Add("display", "block");
		}
		protected void btnQuantidade_Click(object sender, EventArgs e)
		{
			Button btnSender = (Button)sender;
			lblQuantidade.Text = btnSender.Text;

			divCarrinho.Style.Add("display", "block");
		}

		protected void btnAdicionar_Click(object sender, ImageClickEventArgs e)
		{
			try
			{
				if ((Cli.isNull() || (Cli.ID == 0)))
				{
					Response.Redirect("/Cliente/Pages/Login.aspx");
				}

				if (lblTamanho.Text.Equals(string.Empty))
					throw new ApplicationException("Escolha o tamanho desejado!");

				if (lblCor.Text.Equals(string.Empty))
					throw new ApplicationException("Escolha a cor desejada!");

				if (lblQuantidade.Text.Equals(string.Empty))
					throw new ApplicationException("Escolha a quantidade desejado!");

				Produto_Especificacao pe = new Produto_EspecificacaoDAL().ObterPorTamanhoCor(ProdutoID, lblTamanho.Text, lblCor.Text);

				var cp = new Carrinho_Produtos()
				{
					Cliente_ID = Cli.ID,
					Especificacao_ID = pe.ID,
					Quantidade = Convert.ToInt32(lblQuantidade.Text)
				};

				new Carrinho_ProdutosDAL().Adicionar(cp);

				Response.Redirect("/Cliente/Pages/Carrinho.aspx");
			}
			catch (Exception ex)
			{
				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
			}
		}

		protected void rptCores_ItemDataBound(object sender, RepeaterItemEventArgs e)
		{
			Button btnCor = (Button)e.Item.FindControl("btnCor");
			
			btnCor.Style.Add("height", "80px");
			btnCor.Style.Add("min-width", "150px");
			btnCor.Style.Add("font-size", "20px");
			btnCor.Style.Add("border", "none");
			btnCor.Style.Add("background", "#555");
			btnCor.Style.Add("color", "#ABCC01");
		}

		protected void rptQuantidade_ItemDataBound(object sender, RepeaterItemEventArgs e)
		{
			Button btnQuantidade = (Button)e.Item.FindControl("btnQuantidade");

			btnQuantidade.Style.Add("height", "80px");
			btnQuantidade.Style.Add("min-width", "150px");
			btnQuantidade.Style.Add("font-size", "20px");
			btnQuantidade.Style.Add("border", "none");
			btnQuantidade.Style.Add("background", "#555");
			btnQuantidade.Style.Add("color", "#ABCC01");
		}
	}
}